package com.集合.Map___.HashMap__;

import java.util.HashMap;
import java.util.Hashtable;

@SuppressWarnings("all")
public class HashMap底层源码 {
    public static void main(String[] args) {
        /**
         * HashMap的底层源码和HashSet一致，因为HashSet底层就是HashMap；(详细底层源码看hashSet底层源码)
         * 不同点是 HashMap的k-v 是都能传进去，而HashSet是只能存放K，value是每个都固定不变的；
         *
         * 1.初始化为空，调用构造函数将临界比例0.75传进去
         * 2.第一次添加扩容为16个大小，设置临界容量  = 16*0.75 = 12；
         * 3.当元素数量超过临界容量12，就会触发扩容，扩容成2倍 = 32 ，重新设置临界容量 = 32*0.75 = 24；以此类推；
         * 4.树化(链表长度>8 && 数组长度 >=64)
         *  如果一条链表上的元素超过8个，就会触发树化机制，
         *  如果当前数组的大小 >=64，就会将此链表树化，
         *  如果当前数组的大小 <64,就会先扩容，将元素按之前的步骤挂到链表后面；在下一次添加时再判断是否树化；
         *  下一次添加到此链表，长度仍然超过了8，之前数组扩容后长度>=64，就会进行树化。只会将当前链表树化；
         * 5.红黑树剪枝（红黑树元素数量<6）
         *  如果树化后的红黑树删除元素后 链表长度<6了就会变成链表
         */
        HashMap hashMap = new HashMap();
        hashMap.put("1","1");
    }
}
